Optimizing software programs occurs at a variety of stages of software development, and is based on a large number of parameters. For example, the parameters may include run-time features, compilation settings for a compiler used to compile software instructions for the program, tools available on the target computing platform (e.g., available processing cores, memory size, etc.), algorithms used in the program, data structures used in the program, or the like. In addition, the parameters can vary based on target platform for the program, developer goals (e.g., quality of output vs. speed of execution), and the like. In addition, with the development of new platforms and execution tools, selection of an optimization strategy is becoming increasingly difficult.